module.exports = app => {
  const express = require('express')
  const request = require('request')
  const User = require('../plugin/mongodb')
  const jwt = require('jsonwebtoken')

  // 子路由
  const router = express.Router({
    mergeParams: true
  })
  
  var appid = 'wxce784095a3b56b32'
  var secret = 'ffb4d54e3c4772b49dd8c0e07442f4b9'
  var return_uri = 'http://www.dayaar.com.cn/img-pro/getcode'
  var scope = 'snsapi_login'
  var state = '1234'
  var grant_type = 'authorization_code'
  var code = ''
  var userInfo = {}
  var token = ''

  var user = {              // 向 mongodb 保存的数据
    openid: '',
    nickname: '',
    headimgUrl: ''
  }

  var c_user = {}

  // express 路由根路径
  router.get('/', async(req, res) => {
    res.send('接口调试完成')
    // res.render('test')
  })

  // 显示二维码接口
  router.get('/openQrcode', async(req, res) => {
    const url =`https://open.weixin.qq.com/connect/qrconnect?appid=${appid}&redirect_uri=${return_uri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`
    res.send(url)
  })

  // 获取 Code 
  router.get('/getcode', async(req, res) => {
    code = req.query.code
    // console.log('-------------- code ------------');
    // console.log(code);

    // 获取 access_token
    request.get(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=${code}&grant_type=${grant_type}`, (err, res, body) => {
      const data = JSON.parse(body)
      const access_token = data.access_token
      const openid = data.openid
      // console.log('------ access_token ------');
      // console.log(access_token);

      // console.log('----- openid -----');
      // console.log(openid);

      // 获取用户基本信息
      request.get(`https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN`, async(err, res, body) => {
        userInfo = JSON.parse(body)

        // console.log('---- 用户信息 ----');
        // console.log(userInfo); 

        // user 
        user.openid = userInfo.openid
        user.nickname = userInfo.nickname
        user.headimgUrl = userInfo.headimgurl

        // console.log('--------- user 中的信息 ---------');
        // console.log(user);


        // 生成 token
        token = jwt.sign({ openid: userInfo.openid }, app.get('secret'))
        console.log('--------- 生成的 token --------');
        console.log(token);

        // 判断 mongo 数据库中是否存在当前用户， 
        var currentUser = await User.find({ openid: userInfo.openid })
        // console.log('------- 查询 currentuser 结果 --------');
        // console.log('cuurentUser : ' + currentUser);
        // console.log('opnid : ' + currentUser.openid);

        // 如果存在 不添加用户
        if (currentUser.openid !== undefined) {
          console.log('当前用户已存在');
        } else {
          // 如果不存在，在 mongodb 中添加用户
          // User.create({
          //   openid: userInfo.openid,
          //   nickname: userInfo.nickname,
          //   headimgurl: userInfo.headimgurl,
          //   token: token
          // })

          // console.log('添加用户成功');
        }

        // 显示数据库中的用户数据
        const w_data = await User.find()
        console.log('------- mongo 集合 -------');
        console.log(w_data);

        // ++++++++++++++++++++++++++++++ 2022.1.5 21:50 +++++++++++++++++++++++++++++

        // console.log(body);       // 先查看 body 的结构

        // 思路： 在此处 添加 mongodb.create({openid: userinfo.openid ..........})
        // 用户 登录时在 mongodb 数据库 中保存 用户信息

        // 问题1： 多个用户 同时登录 怎么办？？？？？
        // 如何从 请求中直接获取 用户信息 保存到 mongo 数据库

        // 问题2： 如何正确的将数据库中的信息发送给 客户端 的正确用户？？？？？？
        // 思路： 用户 微信登陆的同时向前端响应一个 token, 把 token 和 用户信息 保存在一起
          // 客户端通过 token 查找 自己的用户信息，后端返回 正确信息

        // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      })
    })

    res.redirect('http://127.0.0.1:8083/')
  })      // router.get('/getcode').......
    

  // 向 客户端 发送 token
  router.get('/getToken', async(req, res) => {
    // console.log('---------- 向前端发送 token -----------');
    res.send(token)
  })

  // 接收 token 
  router.post('/postToken', async(req, res) => {
    // console.log('---------- 接受 token -----------');
    // token = req.query.token

    console.log('------ req.query ------');
    console.log(req.query);
    console.log('------ token ------');
    console.log(token);  
      
  })

  // 向客户端发送用户信息 userinfo
  router.get('/getUserInfo', async(req, res) => {
    console.log('------ /getUserInfo 中的 token ------');
    console.log(token);
    // console.log('---------- 向前端发送用户信息 -----------');
    c_user = await User.findOne({ token: token })       // 结果为 null
    console.log('----- c_user ----');
    console.log(c_user);
    res.send(c_user)
  })

  // 退出微信
  router.post('/logout', async(req, res) => {
    userInfo = req.body.cleanUser
    console.log(userInfo);
  })

  
  app.use(router)
}